home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
CU Amiga Super CD-ROM 2
/
CU Amiga Magazine's Super CD-ROM 02 (1996)(EMAP Images)(GB)[!][issue 1996-04].iso
/
magazine
/
amiga_e
/
yax
/
hanoi.yax
next >
Wrap
Lisp/Scheme
|
1992-09-02
|
3KB
|
97 lines
/* Hanoi.yax freeware v1.0 @ Ben Schaeffer1993 */
/*button function needs size => 3*/ (defun button (upleftx uplefty size)
(box upleftx uplefty (+ upleftx (*2 size)) (+ uplefty size) 2)
(box (+2 upleftx) (+1 uplefty) (+ upleftx (*2 size)) (+ uplefty size) 1)
(set size (- size 1))
(box (+2 upleftx) (+1 uplefty) (+ upleftx (*2 size)) (+ uplefty size) 0) )
(defun gadget (q)
(set move 5)
(while (eq move 5)
(while (eq 0 (mouse)))
(set x (mousex))
(set y (mousey))
(if (smaller y 9) (if (smaller x 14)(set move 0))
(if (and (smaller y 72)(smaller x 64)(greater y 22)(greater x 32))
(if (smaller y 40)(set move 1)
(if (greater y 54) (set move 3) (set move 2))
)
)
)
)
(while (eq (mouse) 1)) )
(window 120 10 300 132 'O Hanoi Tower Puzzle ')
(set towerheight -1)
(write 'Stack the numbers on box 3')
(write 'by putting little numbers')
(write 'onto bigger numbers.')
(write)
(write 'Use the mouse on boxes!')
(write)
(write 'Type in you tower height 3-9')
(while (or (greater towerheight 9)(smaller towerheight 3)) (set towerheight (readint)) )
(cls)
(set tower 0)
(for count towerheight 1
(set tower (+ count (* tower 10))) )
(set again -1) (array row 3) (set (row 0) -1) (until (eq 0 again)
(set turn 0)
(set (row 1) tower)
(set (row 2) 0)
(set (row 3) 0)
(cls)
(button 33 23 15)(locate 3 6)(write 1)
(button 33 39 15)(locate 5 6)(write 2)
(button 33 55 15)(locate 7 6)(write 3)
(while (and (uneq 0 again)(uneq tower (row 3)))
(set turn (+ 1 turn))
(for count 1 3
(locate (+ 1 (* 2 count)) 9)
(if(row count)(write (row count) ' ')(write ' '))
)
(locate 1 1)
(while (uneq (mouse) 1))
(write ' From ')
(locate 1 1)
(gadget move)
(set moveone move)
(while (eq 0 (row moveone))(gadget 1)(set moveone move))
(if (eq moveone 0) (set again 0)
(do
(locate 1 8) (write move' To ') (locate 1 14)
(gadget 1)
(set movetwo move)
(if (eq movetwo 0) (set again 0)
(do
(set tempone (- (row moveone) (* (/ (row moveone) 10) 10)))
(set temptwo (- (row movetwo) (* (/ (row movetwo) 10) 10)))
(if (or (eq moveone movetwo)
(and temptwo (greater tempone temptwo)))
(do
(locate 1 1)
(write ' Invalid Move. ')
(locate 1 1)
)
(do
(write move) (locate 1 1)
(set (row movetwo) (+ tempone (* (row movetwo) 10)))
(set (row moveone) (/ (row moveone) 10))
)
)
)
)
)
)
)
(cls)
(if (eq tower (row 3))
(write 'You got it! It took you 'turn' turns')
)
(write 'Would you like to play again?')
(write 'Type 0 for no, 1 for yes:')
(set again (readint)) )